package com.example.myapplication.datastore

import androidx.compose.runtime.collectAsState
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch


//用于封装UI的数据，以及对数据的处理操作
class CounterViewModel(val dataStroe: DataStoreManager) : ViewModel() {
    //可观察的状态数据流（可变的，提供给内部使用）
    private val _appConfig = MutableStateFlow(AppConfig())

    //将MutableStateFlow转换为StateFlow（不可变，供外部UI使用）
    val appConfig = _appConfig.asStateFlow()

    //构造代码块：当CounterViewModel初始化时，读取文件中的数据
    init {
        //使用协程作用域，开启协程
        viewModelScope.launch {
            dataStroe.appConfig.collectLatest { appConfig ->
                _appConfig.value = appConfig
            }
        }
    }

    //自增
    fun increment() {
        viewModelScope.launch {
            _appConfig.value = appConfig.value.copy(counter = _appConfig.value.counter + 1)
            dataStroe.setCounter(_appConfig.value.counter + 1)
        }
    }

    //自减
    fun decrement() {
        viewModelScope.launch {
            _appConfig.value = appConfig.value.copy(counter = _appConfig.value.counter - 1)
            dataStroe.setCounter(_appConfig.value.counter - 1)
        }
    }

    //更新字体大小
    fun updateFontSize(scale: Float) {
        viewModelScope.launch {
            _appConfig.value = appConfig.value.copy(fontSizeScale = scale)
            dataStroe.setFontSizeScale(scale)
        }
    }

    //保存深色模式状态
    fun updateDarkMode(isDarkMode: Boolean) {
        viewModelScope.launch {
            _appConfig.value = appConfig.value.copy(darkMode = isDarkMode)
            dataStroe.setDarkMode(isDarkMode)
        }
    }
}